package br.com.sbc.sessionBean;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import br.com.sbc.ejb.entity.Postagem;

@Stateless
public class PostagemSessionBean {

	public PostagemSessionBean() {

	}

	public void incluirPostagem(Postagem postagem) {
		this.entityManager.persist(postagem);
	}

	@PersistenceContext
	private EntityManager entityManager;

	@SuppressWarnings("unchecked")
	public List<Postagem> listarPostagemRecentes() {
		Query query = entityManager.createNamedQuery("Postagem.postagensRecentes");
		try {
			return query.getResultList();
		} catch (Exception e) {
			return null;
		}
	}

	public Postagem consultaPostagemPorID(Long idPostagem) {
		Query query = entityManager.createNamedQuery("Postagem.consultaPostagemPorId");
		query.setParameter("idPostagem", idPostagem);
		try {
			return (Postagem) query.getSingleResult();
		} catch (Exception e) {
			return null;
		}
	}

	public void alterarPostagem(Postagem postagem) {
		entityManager.merge(postagem);
	}

	@SuppressWarnings("unchecked")
	public List<Postagem> consultaTodasPostagensPorUsuario(Long idUsuario) {
		Query query = entityManager.createNamedQuery("Postagem.postagensPorUsuario");
		query.setParameter("idUsuario", idUsuario);
		try {
			return query.getResultList();
		} catch (Exception e) {
			return null;
		}
	}

	@SuppressWarnings("unchecked")
	public List<Postagem> consultaTodasPostagensPorTitulo(String digitado) {
		Query query = entityManager.createNamedQuery("Postagem.postagensPorTitulo");
		query.setParameter("digitado","% " + digitado + " %");
		query.setParameter("digitado2", "% " + digitado + ".%");
		query.setParameter("digitado3", "%" + digitado + "\n%");
		try {
			return query.getResultList();
		} catch (Exception e) {
			return null;
		}

	}

	@SuppressWarnings("unchecked")
	public List<Postagem> consultaTodasPostagensPorMensagem(String digitado) {
		Query query = entityManager.createNamedQuery("Postagem.postagensPorMensagem");
		query.setParameter("digitado","% " + digitado + " %");
		query.setParameter("digitado2", "% " + digitado + ".%");
		query.setParameter("digitado3", "%\n" + digitado + "\r%");
		try {
			return query.getResultList();
		} catch (Exception e) {
			return null;
		}
	}

	@SuppressWarnings("unchecked")
	public List<Postagem> consultaTodasPostagens() {
		Query query = entityManager.createNamedQuery("Postagem.consultarTodasPostagens");
		try {
			return query.getResultList();
		} catch (Exception e) {
			return null;
		}
	}

	@SuppressWarnings("unchecked")
	public List<Postagem> listarPostagemPorAssunto(Long idAssunto) {
		Query query = entityManager.createNamedQuery("Postagem.postagensPorAssunto");
		query.setParameter("idAssunto", idAssunto);
		try {
			return query.getResultList();
		} catch (Exception e) {
			return null;
		}
	}

	public Long contadorPorAssunto(Long idAssunto) {
		Query query = entityManager.createNamedQuery("Postagem.contadorAssunto");
		query.setParameter("idAssunto", idAssunto);
		try {
			return (Long) query.getSingleResult();
		} catch (Exception e) {
			return null;
		}
	}
	
	@SuppressWarnings("unchecked")
	public List<Postagem> postagemPorViews() {
		Query query = entityManager.createNamedQuery("Postagem.postagemPorViews");
		try {
			return query.getResultList();
		} catch (Exception e) {
			return null;
		}
	}
	@SuppressWarnings("unchecked")
	public List<Long> postagemPorVotos() {
		Query query = entityManager.createNamedQuery("Postagem.postagemPorVoto");
		try {
			return query.getResultList();
		} catch (Exception e) {
			return null;
		}
	}
}
